package org.example.aigc.service;

import jakarta.servlet.http.HttpServletRequest;
import org.example.aigc.entity.Course;
import org.example.aigc.entity.Part;
import org.example.aigc.entity.Section;
import org.example.aigc.utils.Reply;

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;

public interface CourseService {

    /**
     * 获取所有课程
     *
     * @return 返回获取的课程列表
     */
    List<Course> getAllCourse();

    /**
     * 根据课程 id 获取课程信息
     *
     * @param id 课程的 id
     * @return 课程信息
     */
    Course getById(Long id);

    /**
     * 查询课程是否被用户收藏
     *
     * @param request  请求变量
     * @param courseId 课程 id
     * @return 返回查询状态
     */
    Boolean isFavorite(HttpServletRequest request, Long courseId);

    /**
     * 创建课程
     *
     * @param request    请求变量
     * @param courseName 课程名
     * @param coverName  课程的封面的路径（名称）
     * @param detail     课程细节
     * @param audioId    音频id
     * @param appearanceId 外形id
     * @return 返回查询状态
     */
    Reply createCourse(HttpServletRequest request, String courseName, String coverName, String detail, Long audioId, Long appearanceId);

    /**
     * 删除课程
     *
     * @param courseId 待删除的课程Id
     * @return 返回删除状态
     */
    int deleteCourse(Long courseId);

    /**
     * 通过课程id获取课程部分
     *
     * @param id 课程id
     * @return 返回课程部分列表
     */
    List<Part> getPartByCourseId(Long id);

    /**
     * 创建部分
     *
     * @param name    part名
     * @param chapter 章节索引
     * @param course  所属课程
     * @return 返回查询状态
     */
    Reply createPart(String name, String chapter, Course course);

    /**
     * 删除部分
     *
     * @param partId 待删除的part的id
     * @return 返回查询状态
     */
    int deletePart(Long partId);

    /**
     * 更新课程详情
     *
     * @param request   请求变量
     * @param courseId  课程id
     * @param newDetail 新详情
     * @return 更新状态
     */
    int updateDetail(HttpServletRequest request, Long courseId, String newDetail);

    /**
     * 用部分id获取章节
     *
     * @param partId 部分id
     * @return 返回查询结果
     */
    List<Section> getSectionByPartId(Long partId);

    /**
     * 删除章节
     *
     * @param sectionId 待删除章节的id
     * @return 删除状态
     */
    int deleteSection(Long sectionId);

    /**
     * 创建章节
     *
     * @param name      章节名
     * @param videoName 视频名
     * @param partId    部分 id
     * @param courseId  课程 id
     * @param chapter   章节索引
     * @return 创建状态
     */
    Reply createSection(String name, String videoName, String times, Long pptId, Long partId, Long courseId, String chapter);

    /**
     * 创建 PPT 内容信息
     *
     * @param pptName PPT 文件名
     * @param content 每页PPT对应要说的话
     * @param courseId ppt对应的课程id，用于匹配知识库
     * @return 返回创建的 id
     */
    Reply createPPT(String pptName, String content, Long courseId);

    /**
     * 生成文本
     * @param imageURL 图片URL
     * @return  生成的文本
     */
    String generateWord(String imageURL) throws IOException;
    
    /**
     * 删除 PPT 内容信息
     *
     * @param pptId ppt实体的id
     * @return 返回删除结果
     */
    int deletePPT(Long pptId);

}
